****************************************************************************

Viterbi.asm      Soft Decision GSM Viterbi Decoder

Analog Devices, Inc.
DSP Division
Three Technology Way
P.O. Box 9106
Norwood, MA 02062

21-JUNE-2001 BJM

This directory contains an example ADSP-2191 single-core subroutine 
that implements a soft decision half-rate, soft-decision, GSM Viterbi decoder.

Files contained in this directory:

VITERBI.dpj			VisualDSP project file
VITERBI.asm			ADSP-2191 source for Viterbi
ADSP-2191.ldf			Linker description file 
GSM_REC.dat			Soft decision data for Viterbi
 _________________________________________________________________

CONTENTS

I.    FUNCTION/ALGORITHM DESCRIPTION
II.   IMPLEMENTATION DESCRIPTION
III.  DESCRIPTION OF INPUT DATA         

I. FUNCTION/ALGORITHM DESCRIPTION

The project Viterbi.dpj contains an implementation of a single-core
subroutine that implements a half-rate, soft-decision, GSM Vitertbi decoder.  

II.   IMPLEMENTATION DESCRIPTION

1. METRIC UPDATE:
-----------------
The metric update section accumulates branch distance metrics into path metrics.
The lowest path metric at the end of processing is considered to denote the 
path most likely to contain the correct decoding of the input. 

Each element of the state_trans[] array represents a state transition.  
Each of the 16-bits in an element of state_trans[] represents one of the
16 possible new states, and indicates which of two possible states
is the most likely previous state.

2. TRACE BACK:
--------------
The traceback traces back through the state_trans[] array.  Starting
with a new state, the bits of "state" are rotated to compute the
position of the bit in the current state_trans[] array element that 
represents this new state.  This bit indicates which state was previous.  
We update the state to the previous state using this bit. 

During any state transition, the most significant of the four bits in
"state" is the most recent input bit to the convolutional encoder.
This is the bit which is added to the output of the decoder.

III.  DESCRIPTION OF INPUT DATA

1. INPUT SAMPLES:
-----------------
The Viterbi decoder routine expects input data which conforms to the following criteria:

The class 1 bits are encoded with the 1/2 rate convolutional code defined by 
the polynomials:

G0 = 1 + D3+ D4
G1 = 1 + D + D3+ D4

Encoded outputs are transmitted as signed antipodal analog signals.  They are received at 
the decoder and quantized.  The quantized number is represented in a 2's
compliment giving the range of -8 to 7.  The process of quantizing a binary analog signal
with a multi-bit qunatizer is called soft decision.  This soft decision is stored in the 
array 'SOFT_DEC_INPUT'.




